package com.boot2.core.model.dto;

import com.alibaba.fastjson.annotation.JSONField;
import com.boot2.core.utils.CheckUtil;
import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.Transient;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

/**
 * @author zhangweilin
 * @Description: 不开放在api中，只用于约定传值用
 * @date 2020/9/11
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public abstract class CommonBaseEntity implements Serializable {

    /**
     * 不接受页面传值，只接受应用中方法与方法间传值，类似request.setAttribute()
     */
    @Transient // 一般情况不序列化
    @JsonIgnore // jackson不序列化
    @JSONField(serialize = false) // fast不序列化
    @ApiModelProperty(hidden = true)
    private Map<Object, Object> paramMap =null;

    /**
     * 非共享 实例，无须同步锁
     * @param key
     * @param value
     * @param <K>
     * @param <V>
     */
    public <K, V> void put(K key, V value) {
        if (CheckUtil.isEmpty(paramMap)) {
            paramMap = new HashMap<>();
        }
        paramMap.put(key, value);
    }

    public <K, V> V get(K key) {
        if (CheckUtil.isEmpty(paramMap)) {
            paramMap = new HashMap<>();
        }
        return (V) paramMap.get(key);
    }

}
